package com.softer.wxzj.service;

import com.github.pagehelper.PageInfo;
import com.softer.wxzj.common.entity.CommonResult;
import com.softer.wxzj.common.entity.Page;
import com.softer.wxzj.entity.*;

import java.util.List;
import java.util.Map;

/**
 * @author Gong Zhiyang
 * @date 2019/7/12
 */
public interface OrgBankInfoService {
    /**
     * 物业银行账号新增
     *
     * @param orgBankInfo 银行账号
     * @return 结果
     */
    CommonResult add(OrgBankInfo orgBankInfo);

    /**
     * 启用/停用账号 1启用，0停用
     *
     * @param id    账号ID
     * @param state 1启用，0停用
     * @return 修改结果
     */
    CommonResult updateState(String id, String state);

    /**
     * 查询某个物业企业下的所有账号
     *
     * @param page        分页实体
     * @param orgBankInfo 查询实体
     * @return 账号列表
     */
    PageInfo<OrgBankInfo> getOrgBankInfoList(Page page, OrgBankInfo orgBankInfo);

    /**
     * 查询详情
     *
     * @param id      账号ID
     * @param arcType 图档大类
     * @return 详情
     */
    OrgBankInfo getInfo(String id, String arcType);

    /**
     * 修改物业企业账号
     *
     * @param orgBankInfo 账号实体
     * @param reason      变更说明
     * @return 修改结果
     */
    CommonResult update(OrgBankInfo orgBankInfo, String reason);

    /**
     * 根据ID查询变更记录
     *
     * @param page          分页实体
     * @param baseModifyReq 查询实体  账号ID（也是变更表中的业务ID）
     * @return 变更记录列表
     */
    PageInfo<BaseModifyReq> getReqListById(Page page, BaseModifyReq baseModifyReq);

    List<OrgBankInfo> getList();

    /**
     * 获取企业下可以账号列表
     *
     * @param id 企业ID
     * @return 银行账户列表
     */
    List<OrgBankInfo> getOrgBankAccount(String id);

    /**
     * 新增物业企业和企业银行账户
     *
     * @param organization 物业企业信息
     * @param orgBankInfo  银行账户信息
     * @return 新增结果
     */
    CommonResult addCorpAndOrgBank(BaseOrganization organization, OrgBankInfo orgBankInfo);

    /**
     * 修改物业企业和企业银行账户
     *
     * @param organization 物业企业信息
     * @param orgBankInfo  银行账户信息
     * @return 修改结果
     */
    CommonResult updateCorpAndOrgBank(BaseOrganization organization, OrgBankInfo orgBankInfo);

    /**
     * 新增业委会和企业银行账户
     *
     * @param baseOwnerCommittee 业委会信息
     * @param orgBankInfo        银行账户信息
     * @return 新增结果
     */
    CommonResult addCommitteeAndOrgBank(BaseOwnerCommittee baseOwnerCommittee, OrgBankInfo orgBankInfo);

    /**
     * 修改业委会和企业银行账户
     *
     * @param baseOwnerCommittee 业委会信息
     * @param orgBankInfo        银行账户信息
     * @return 修改结果
     */
    CommonResult updateCommitteeAndOrgBank(BaseOwnerCommittee baseOwnerCommittee, OrgBankInfo orgBankInfo);

    /**
     * 根据项目ID查询该项目的收款单位
     *
     * @param id 拨款ID
     * @return 收款单位集合（申请单位和施工单位）
     */
    List<Map<String,String>> getOrgByReqId(String id);
    /**
     * 外网调用，修改物业企业账号
     *
     * @param orgBankInfo 账号实体
     * @return 修改结果
     */
    CommonResult updateOrg(OrgBankInfo orgBankInfo);
    /**
     * 外网查询收款账号变更详情
     *
     * @param id 收款账号ID（也是变更表中的业务ID）
     * @return 收款账号变更详情列表
     */
    PageInfo<BaseModifyDetail> getModifyDetailList(Page page, String id);
}
